var mongodb = require("mongodb"); // 引入mongodb

var MongoClient = mongodb.MongoClient;

var dbUrl = "mongodb://localhost:27017"; // 数据库的地址及端口

var dbName = "p3_2108A_kaoshi"; // 库名

// 连接数据库
function connectMGDB(cb, res) {
  MongoClient.connect(
    dbUrl,
    {
      useNewUrlParser: true,
    },
    function (err, db) {
      // console.log('db==========', db);
      if (err) {
        console.log("数据库连接失败：", err);
        res.send({
          error: 1,
        }); // 数据库连接失败
      } else {
        console.log("数据库连接成功");
        // 关联数据库
        var dbase = db.db(dbName);
        // 进行增删改查操作
        cb(dbase, db);
      }
    }
  );
}
// 插入方法
module.exports.insert = function (res, cName, obj, cb) {
  connectMGDB(function (dbase, db) {
    dbase.collection(cName).insert(obj, function (err, result) {
      cb(err, result, db);
    });
  }, res);
};

// 查询方法
module.exports.find = function (res, cName, whereObj, cb) {
  connectMGDB(function (dbase, db) {
    whereObj.find ? whereObj.find : (whereObj.find = {}); // whereObj对象中有find属性 则执行whereObj.find
    whereObj.sort ? whereObj.sort : (whereObj.sort = {});
    whereObj.limit ? whereObj.limit : (whereObj.limit = 0);
    whereObj.skip ? whereObj.skip : (whereObj.skip = 0);
    // 查询 age>16 的数据  跳过3条数据  显示3条数据
    console.log("whereObj.sort:", whereObj.sort);
    dbase
      .collection(cName)
      .find()
      .count()
      .then(function (count) {
        // 查询当前数据总量
        dbase
          .collection(cName)
          .find(whereObj.find)
          .limit(whereObj.limit)
          .skip(whereObj.skip)
          .sort(whereObj.sort)
          .toArray(function (err, result) {
            // 根据查询条件返回对应数据
            cb(err, result, db, count);
          });
      });
  }, res);
};

// 删除方法
module.exports.delete = function (res, cName, obj, cb) {
  connectMGDB(function (dbase, db) {
    dbase.collection(cName).deleteOne(obj, function (err, result) {
      cb(err, result, db);
    });
  }, res);
};

// 修改方法
module.exports.update = function (res, cName, whereObj, updatePbj, cb) {
  connectMGDB(function (dbase, db) {
    dbase
      .collection(cName)
      .updateOne(whereObj, updatePbj, function (err, result) {
        cb(err, result, db);
      });
  }, res);
};
